'''
1.key不允许重复，如果key重复了，后一个key会覆盖前一个key
2.value可以是任意类型，但是key 只能使用不可变类型，一般使用字符串

可变：列表、字典、集合    如果修改值，内存地址不会变化
不可变：字符串、数字、元组  如果修改值，内存地址会发生变化
'''
a = {
    'name': 'xiaoming',
    'age': 18,
    4: 'good',
    ('yes', 8): 100
}
# key是字符串必须加引号，找不到key报错
print(a['name'])
# get方法找不到默认值None，可以指定默认值
print(a.get('gender', 'female'))

print(a[4])
print(a[("yes", 8)])

# 修改和添加,如果key存在，就修改，不存在就添加
a['name'] = 'zhangsan'
a['gender'] = 'male'

print(a)
# 删除指定key对应的键值对，返回删除的value
r2 = a.pop(4)
print(r2)
print(a)

# 删除最后一个键值对,返回删除的键值对
r1 = a.popitem()
print(r1)
print(a)

# 列表和元组支持+合并成一个元组，但是字典不能，可以用update

list1 = [1, 2, 3]
list2 = [3, 4, 5]
# list1.extend(list2)
# print(list1)
print(list1 + list2)

tuple1 = ('a', 'b')
tuple2 = (2, 3, 4)
print(tuple1 + tuple2)

dict1 = {1: 2, 3: 4}
dict2 = {5: 6, 7: 8}
dict1.update(dict2)
print(dict1, dict2)

# 遍历

for k in a:
    print(k, "=", a[k])

for k in a.keys():
    print(k, "=", a[k])

# 只能获取value
for v in a.values():
    print("=", v)

# a.item() 元组元素组成的列表
for item in a.items():
    print(item[0], "=", item[1])

for k, v in a.items():
    print(k, "=", v)

# 字典推导式

dict3 = {1: 3, 2: 6, 3: 9}
dict4 = {k: v for k, v in dict3.items()}
print(dict3, dict4)
